package net.lengwang.iot.middleware.packet.request;

import net.lengwang.iot.middleware.packet.ParsedPacket;

public class HandshakePacketParser {

    // | 起始位置 (10进制) | 内容 (16进制) | 含义 | 备注 |
    // | --- | --- | --- | --- |
    // | 01 | BE BE | 起始标志位 | 固定值 |
    // | 03 | 04 | 数据包总长度 | 固定值 |
    // | 04 | 90 | 命令位 | 固定值 |
    // | 05 | 01 | 协议版本 | |
    // | 06 | 01 A2 | 序列号 | 每次传输，此序列号递增，最大65535，达到最大值后从1开始。 |
    // | 08 | 00 00 | CRC16 | 设为0x00 0x00可以屏蔽CRC16校验的功能。 |
    // | 10 | EB EB | 结束位 | 固定值 |
    public static ParsedPacket parsePacket(ParsedPacket parsedPacket) {
        String hexPacket = parsedPacket.getParsedData();
        // 设置起始标志位（固定值：BE BE）
        parsedPacket.setStartFlag(hexPacket.substring(0, 4));
        // 设置数据包总长度（固定值：04）
        parsedPacket.setLength(hexPacket.substring(4, 6));
        // 设置命令位（固定值：90）
        parsedPacket.setCommand(hexPacket.substring(6, 8));
        // 设置协议版本
        parsedPacket.setVersion(hexPacket.substring(8, 10));
        // 设置序列号（每次传输递增，最大65535，达到最大值后从1开始）
        parsedPacket.setSequenceNumber(hexPacket.substring(10, 14));
        // 设置CRC16（设为00 00可以屏蔽CRC16校验的功能）
        parsedPacket.setCrc16(hexPacket.substring(14, 18));
        // 设置结束位（固定值：EB EB）
        parsedPacket.setEndFlag(hexPacket.substring(18, 22));

        // 设置命令名称
        parsedPacket.setCommandName("网关握手");

        return parsedPacket;
    }
}
